home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / DEMON / RISCOS2 / TCP_131S.ARC / c / ICMPDUMP < prev    next >
Text File  |  1992-08-29  |  2KB  |  78 lines

  1. #include <stdio.h>
  2. #include "global.h"
  3. #include "mbuf.h"
  4. #include "internet.h"
  5. #include "icmp.h"
  6. #include "trace.h"
  7. #include "timer.h"
  8. #include "ip.h"
  9. #include "misc.h"
  10.  
  11. /* Dump an ICMP header */
  12. void icmp_dump(struct mbuf **bpp, int32 source, int32 dest, int check)
  13. {
  14.         struct icmp icmp;
  15.         int16 csum;
  16.                      
  17.         source = source;
  18.         dest   = dest;
  19.  
  20.         if(bpp == NULLBUFP || *bpp == NULLBUF)
  21.                 return;
  22.         csum = cksum(NULLHEADER,*bpp,len_mbuf(*bpp));
  23.         
  24.         ntohicmp(&icmp,bpp);
  25.         
  26.         if(uchar(icmp.type) <= 16 && icmptypes[uchar(icmp.type)] != NULLCHAR)
  27.                 twprintf("ICMP: %s",icmptypes[uchar(icmp.type)]);
  28.         else
  29.                 twprintf("ICMP: type %u",uchar(icmp.type));
  30.  
  31.         switch(uchar(icmp.type)){
  32.         case DEST_UNREACH:
  33.                 if(uchar(icmp.code) <= 5)
  34.                         twprintf(" %s",unreach[uchar(icmp.code)]);
  35.                 else
  36.                         twprintf(" code %u",uchar(icmp.code));
  37.                 break;
  38.         case REDIRECT:
  39.                 if(uchar(icmp.code) <= 3)
  40.                         twprintf(" %s",redirect[uchar(icmp.code)]);
  41.                 else
  42.                         twprintf(" code %u",uchar(icmp.code));
  43.                 break;
  44.         case TIME_EXCEED:
  45.                 if(uchar(icmp.code) <= 1)
  46.                         twprintf(" %s",exceed[uchar(icmp.code)]);
  47.                 else
  48.                         twprintf(" code %u",uchar(icmp.code));
  49.                 break;
  50.         case PARAM_PROB:
  51.                 twprintf(" pointer = %u",icmp.args.pointer);
  52.                 break;
  53.         case ECHO:
  54.         case ECHO_REPLY:
  55.         case INFO_RQST:
  56.         case INFO_REPLY:
  57.         case TIMESTAMP:
  58.         case TIME_REPLY:
  59.                 twprintf(" id %u seq %u",icmp.args.echo.id,icmp.args.echo.seq);
  60.                 break;
  61.         }
  62.         if(check && csum != 0){
  63.                 twprintf(" CHECKSUM ERROR (%u)",csum);
  64.         }
  65.         twprintf("\n");
  66.         /* Dump the offending IP header, if any */
  67.         switch(icmp.type){
  68.         case DEST_UNREACH:
  69.         case TIME_EXCEED:
  70.         case PARAM_PROB:
  71.         case QUENCH:
  72.         case REDIRECT:
  73.                 twprintf("Returned ");
  74.                 ip_dump(bpp,0);
  75.         }
  76. }
  77.  
  78.